package cn.virens.common.util.core.stream;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiFunction;
import java.util.function.ToIntFunction;

public class FunUtil {
    /**
     * 带序列号的流处理器
     *
     * @param <T> 流类型
     * @param fun 回调处理
     * @return 转为Int的Fun
     */
    public static <T> ToIntFunction<T> toInt(BiFunction<T, Integer, Integer> fun) {
        return toInt(new AtomicInteger(0), fun);
    }

    /**
     * 带序列号的流处理器
     *
     * @param <T>   流类型
     * @param index 序列号生成器
     * @param fun   回调处理
     * @return 转为Int的Fun
     */
    public static <T> ToIntFunction<T> toInt(AtomicInteger index, BiFunction<T, Integer, Integer> fun) {
        return value -> fun.apply(value, index.incrementAndGet());
    }

}
